import { db, client } from './drizzle';
import { users, teams, teamMembers } from './schema';
import { hashPassword } from '@/lib/auth/session';
import dotenv from 'dotenv';

// 加载环境变量
dotenv.config();

async function seed() {
  console.log('开始初始化 PGlite 数据库...');
  console.log('使用数据库 URL:', process.env.POSTGRES_URL);
  
  try {
    // 检查 users 表是否存在
    console.log('尝试运行测试查询...');
    const tableCheck = await client.query('SELECT to_regclass(\'public.users\') as exists');
    console.log('表检查结果:', tableCheck.rows);
    
    // 添加类型断言
    const exists = (tableCheck.rows[0] as { exists: string | null }).exists;
    
    if (!exists) {
      throw new Error('users 表不存在，请确保已运行迁移');
    }
    
    // 创建测试用户
    const email = 'test@test.com';
    const password = 'admin123';
    const passwordHash = await hashPassword(password);

    console.log('正在创建初始用户...');
    const [user] = await db
      .insert(users)
      .values([
        {
          email: email,
          passwordHash: passwordHash,
          role: "owner",
        },
      ])
      .returning();

    console.log('初始用户已创建：');
    console.log(`- 邮箱：${email}`);
    console.log(`- 密码：${password}`);

    // 创建测试团队
    console.log('正在创建测试团队...');
    const [team] = await db
      .insert(teams)
      .values({
        name: 'Test Team',
        // 模拟订阅数据，而不是实际调用 Stripe
        planName: 'Basic Plan (Mock)',
        subscriptionStatus: 'active',
      })
      .returning();

    // 将用户添加到团队
    await db.insert(teamMembers).values({
      teamId: team.id,
      userId: user.id,
      role: 'owner',
    });

    console.log('团队已创建，用户已添加为团队所有者。');
    
    console.log('PGlite 数据库初始化完成！');
    console.log('\n您现在可以使用这些凭据登录：');
    console.log(`- 邮箱：${email}`);
    console.log(`- 密码：${password}`);
    console.log('\n接下来运行开发服务器：');
    console.log('pnpm dev');
  } catch (error) {
    console.error('初始化过程中发生错误：', error);
    
    // 尝试直接使用原始 SQL 创建用户
    try {
      console.log('尝试使用原始 SQL 创建用户...');
      await client.query(`
        INSERT INTO users (email, password_hash, role, created_at, updated_at)
        VALUES ('test@test.com', $1, 'owner', NOW(), NOW())
        RETURNING id
      `, [await hashPassword('admin123')]);
      
      console.log('使用原始 SQL 创建用户成功！');
    } catch (sqlError) {
      console.error('使用原始 SQL 创建用户失败：', sqlError);
    }
    
    throw error;
  }
}

seed()
  .catch((error) => {
    console.error('种子过程失败：', error);
    process.exit(1);
  })
  .finally(() => {
    console.log('种子过程完成，正在退出...');
    process.exit(0);
  }); 